#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QGraphicsScene>
#include <QTextEdit>
#include <QTimer>
#include <QMap>
#include <QVariant>

// Qt Charts
#include <QChart>
#include <QChartView>
#include <QLineSeries>
#include <QValueAxis>

class SimpleDeviceItem;

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    // 绘制多组件功率曲线
    void plotPowerCurves(const QVector<QVector<double>>& powerData,
                         const QStringList& componentNames);

    // 导出当前曲线数据到 CSV
    void exportCurvesToCsv(const QString &filePath);

    // 清空曲线
    void clearCurves();

private:
    Ui::MainWindow *ui;
    QGraphicsScene *m_scene = nullptr;
    QTextEdit *m_propText = nullptr;
    QTimer *m_timeTimer = nullptr;

    // 状态与数据
    QMap<QString, QVariantMap> m_status;   // componentId -> {power,cost,other}
    QList<QVariantMap> m_csvData;          // CSV 的所有行
    int m_csvIndex = 0;                    // 当前读取行号

    // 曲线绘图
    QChart *m_chart = nullptr;
    QChartView *m_chartView = nullptr;
    QMap<QString, QLineSeries*> m_seriesMap;  // 每个组件对应一条曲线

private slots:
    void onEditComponentRequested(const QString &compId);
    void onViewComponentCurve(const QString &compId);
    void onPauseToggled(bool paused);

private:
    void addConnection(const QPointF &from, const QPointF &to);
    void createToolbar();
    void updatePropertyDisplay(const QString &compId);
    void updateTimeTick();
    void showEditDialogForComponent(const QString &compId);
    void restoreOverallSnapshot();
    void loadCsv(const QString &filePath);
    void updateFromCsv();
    void recalcCosts();

    // 初始化曲线
    void initChart();
    // 向指定组件曲线追加一个点
    void appendCurvePoint(const QString &compId, double value, int tIndex);
};

#endif // MAINWINDOW_H
